home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / GMS / GMSDev / Source / E / Demos / IntMandel.e next >
Encoding:
Text File  |  1998-03-16  |  2.4 KB  |  97 lines

  1. /* This is a Mandel generator from the Amiga E archive (which was converted
  2. ** from Oberon) and is now converted to work with GMS.
  3. */
  4.  
  5. MODULE 'gms/dpkernel','gms/dpkernel/dpkernel','gms/graphics/pictures'
  6. MODULE 'gms/files/files','gms/screens','gms/system/register','gms/system/modules'
  7. MODULE 'gms/input/joydata','gms/graphics/screens','gms/graphics/blitter'
  8. MODULE 'gms/blitter'
  9.  
  10. CONST ITERDEPTH = 50   /* This constant defines the detail of the mandel */
  11.  
  12. PROC main()
  13.  DEF screen=NIL:PTR TO screen, zr, zi, ar, ai, dr, di, sr, si, st, x, y, i,
  14.      joy       = NIL:PTR TO joydata,
  15.      scrmodule = NIL:PTR TO module,
  16.      bltmodule = NIL:PTR TO module
  17.  
  18.  IF dpkbase := OpenLibrary('GMS:libs/dpkernel.library',0)
  19.   IF (scrmodule := Init([TAGS_MODULE,NIL,
  20.       MODA_NUMBER,    MOD_SCREENS,
  21.       MODA_TABLETYPE, JMP_AMIGAE,
  22.       TAGEND], NIL))
  23.       scrbase := scrmodule.modbase
  24.  
  25.   IF (bltmodule := Init([TAGS_MODULE,NIL,
  26.       MODA_NUMBER,    MOD_BLITTER,
  27.       MODA_TABLETYPE, JMP_AMIGAE,
  28.       TAGEND], NIL))
  29.       bltbase := bltmodule.modbase
  30.  
  31.   IF (screen := Init([TAGS_SCREEN,NIL,
  32.        GSA_Width,      640,
  33.        GSA_Height,     512,
  34.          GSA_BitmapTags, NIL,
  35.          BMA_AmtColours, 16,
  36.          TAGEND,         NIL,
  37.        GSA_ScrMode,    SM_HIRES OR SM_LACED,
  38.        TAGEND],NIL))
  39.  
  40.    x := 256/screen.bitmap.amtcolours*2
  41.    FOR i:=0 TO screen.bitmap.amtcolours-1 DO UpdateColour(screen,i,(Shl(i*x,8) OR (i*x)))
  42.  
  43.    sr := $400000/screen.width   -> shrink horiz
  44.    si := $300000/screen.height  -> shrink vert
  45.    st := $140000*-2             -> move side
  46.    zi := $160000                -> move up
  47.  
  48.    IF (joy := Init(Get(ID_JOYDATA),NIL))
  49.  
  50.     Show(screen)
  51.  
  52.     FOR y:=screen.height-1 TO 0 STEP -1
  53.       zi := zi-si
  54.       zr := st
  55.  
  56.       FOR x:=0 TO screen.width-1
  57.  
  58.         Query(joy)
  59.         IF (joy.buttons AND JD_LMB) THEN JUMP end
  60.  
  61.         i := 0
  62.         ar := zr
  63.         ai := zi
  64.         REPEAT
  65.           dr := Shr(ar,10)
  66.           di := Shr(ai,10)
  67.           ai := dr*2*di+zi
  68.           dr := dr*dr
  69.           di := di*di
  70.           ar := dr-di+zr
  71.           i++
  72.         UNTIL (i>ITERDEPTH) OR (dr+di>$400000)
  73.         DrawPixel(screen.bitmap, x, y, Mod(i, screen.bitmap.amtcolours))
  74.         zr:=zr+sr
  75.       ENDFOR
  76.  
  77.     ENDFOR
  78.  
  79.     REPEAT
  80.       WaitAVBL()
  81.       Query(joy)
  82.     UNTIL (joy.buttons AND JD_LMB)
  83.  
  84. end:
  85.    ENDIF
  86.   ENDIF
  87.   ENDIF
  88.   ENDIF
  89.  Free(joy)
  90.  Free(screen)        
  91.  Free(scrmodule)
  92.  Free(bltmodule)
  93.  CloseDPK()
  94.  ENDIF
  95. ENDPROC
  96.  
  97.